import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';
import { IPSSubSysServiceAPIDE } from './ipssub-sys-service-apide';
import { IPSSubSysServiceAPIDERS } from './ipssub-sys-service-apiders';
import { IPSSubSysServiceAPIDTO } from './ipssub-sys-service-apidto';
import { IPSOpenAPI3Schema } from './openapi/ipsopen-api3-schema';
import { IPSSystemModule } from '../system/ipssystem-module';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSubSysServiceAPI
 */
export interface IPSSubSysServiceAPI extends IPSModelObject {
  /**
   * 接口来源
   * @description 值模式 [子系统服务接口来源] {NONE：无、 SYSAPI：当前系统服务接口、 DEVSYSAPI：外部开发系统服务接口、 PREDEFINED：预定义系统服务接口 }
   * @type {( string | 'NONE' | 'SYSAPI' | 'DEVSYSAPI' | 'PREDEFINED')}
   */
  aPISource: string | 'NONE' | 'SYSAPI' | 'DEVSYSAPI' | 'PREDEFINED';

  /**
   * 接口标记
   * @type {string}
   */
  aPITag: string;

  /**
   * 接口标记2
   * @type {string}
   */
  aPITag2: string;

  /**
   * 接口类型
   * @description 值模式 [系统服务接口类型] {RESTFUL：RESTful API、 JAXRS：RESTful WebService、 WEBSERVICE：WebService、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'RESTFUL' | 'JAXRS' | 'WEBSERVICE' | 'USER' | 'USER2')}
   */
  aPIType: string | 'RESTFUL' | 'JAXRS' | 'WEBSERVICE' | 'USER' | 'USER2';

  /**
   * 接口实体关系集合
   *
   * @type {IPSSubSysServiceAPIDERS[]}
   */
  getAllPSSubSysServiceAPIDERSs(): IPSSubSysServiceAPIDERS[] | null;

  /**
   * 接口实体关系集合
   *
   * @type {IPSSubSysServiceAPIDERS[]}
   */
  get allPSSubSysServiceAPIDERSs(): IPSSubSysServiceAPIDERS[] | null;

  findPSSubSysServiceAPIDERS(objKey: any): IPSSubSysServiceAPIDERS | null;

  /**
   * 接口实体集合
   *
   * @type {IPSSubSysServiceAPIDE[]}
   */
  getAllPSSubSysServiceAPIDEs(): IPSSubSysServiceAPIDE[] | null;

  /**
   * 接口实体集合
   *
   * @type {IPSSubSysServiceAPIDE[]}
   */
  get allPSSubSysServiceAPIDEs(): IPSSubSysServiceAPIDE[] | null;

  findPSSubSysServiceAPIDE(objKey: any): IPSSubSysServiceAPIDE | null;

  /**
   * 接口DTO集合
   *
   * @type {IPSSubSysServiceAPIDTO[]}
   */
  getAllPSSubSysServiceAPIDTOs(): IPSSubSysServiceAPIDTO[] | null;

  /**
   * 接口DTO集合
   *
   * @type {IPSSubSysServiceAPIDTO[]}
   */
  get allPSSubSysServiceAPIDTOs(): IPSSubSysServiceAPIDTO[] | null;

  findPSSubSysServiceAPIDTO(objKey: any): IPSSubSysServiceAPIDTO | null;

  /**
   * 认证token路径
   * @type {string}
   */
  authAccessTokenUrl: string;

  /**
   * 认证客户端标识
   * @type {string}
   */
  authClientId: string;

  /**
   * 认证客户端密码
   * @type {string}
   */
  authClientSecret: string;

  /**
   * 认证模式
   * @description 值模式 [系统服务接口认证模式] {NONE：无认证、 AUTHORIZATION_CODE：授权码模式、 PASSWORD：密码模式、 CLIENT_CREDENTIALS：客户端模式、 IMPLICIT：简化模式、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2')}
   */
  authMode: string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2';

  /**
   * 认证参数
   * @type {string}
   */
  authParam: string;

  /**
   * 认证参数2
   * @type {string}
   */
  authParam2: string;

  /**
   * 认证参数3
   * @type {string}
   */
  authParam3: string;

  /**
   * 认证参数4
   * @type {string}
   */
  authParam4: string;

  /**
   * 认证脚本代码
   * @type {string}
   */
  authScriptCode: string;

  /**
   * 认证超时时长
   * @type {number}
   * @default -1
   */
  authTimeout: number;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 处理对象
   * @type {string}
   */
  handler: string;

  /**
   * 请求头集合
   * @type {IModel}
   */
  headerParams: IModel;

  /**
   * 方法调用脚本代码
   * @type {string}
   */
  methodScriptCode: string;

  /**
   * OpenAPI3 Schema
   *
   * @type {IPSOpenAPI3Schema}
   */
  getPSOpenAPI3Schema(): IPSOpenAPI3Schema | null;

  /**
   * OpenAPI3 Schema
   *
   * @type {IPSOpenAPI3Schema}
   */
  get psOpenAPI3Schema(): IPSOpenAPI3Schema | null;

  /**
   * OpenAPI3 Schema（必须存在）
   *
   * @type {IPSOpenAPI3Schema}
   */
  getPSOpenAPI3SchemaMust(): IPSOpenAPI3Schema;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 预定义接口类型
   * @description 值模式 [云平台部服务接口处理对象（客户端）] {SAASADMIN：SaaS应用管理接口、 WFSERVICE：工作流引擎服务接口、 WFCALLBACK：工作流引擎回调接口、 USERAUTH：用户授权服务接口、 ORGSERVICE：组织管理服务接口、 ORGCALLBACK：组织服务回调接口、 CORESERVICE：SaaS核心服务接口、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'SAASADMIN' | 'WFSERVICE' | 'WFCALLBACK' | 'USERAUTH' | 'ORGSERVICE' | 'ORGCALLBACK' | 'CORESERVICE' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  predefinedType: string | 'SAASADMIN' | 'WFSERVICE' | 'WFCALLBACK' | 'USERAUTH' | 'ORGSERVICE' | 'ORGCALLBACK' | 'CORESERVICE' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 服务代码名称
   * @type {string}
   */
  serviceCodeName: string;

  /**
   * 服务参数
   * @type {string}
   */
  serviceParam: string;

  /**
   * 服务参数2
   * @type {string}
   */
  serviceParam2: string;

  /**
   * 服务参数3
   * @type {string}
   */
  serviceParam3: string;

  /**
   * 服务参数4
   * @type {string}
   */
  serviceParam4: string;

  /**
   * 服务路径
   * @type {string}
   */
  servicePath: string;

  /**
   * 服务类型
   * @description 值模式 [系统服务接口服务类型] {DEFAULT：默认、 IBIZCLOUD：iBizCloud、 APPLICATION：应用、 LOCAL：本地接口、 MIDDLEPLATFORM：中台、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'DEFAULT' | 'IBIZCLOUD' | 'APPLICATION' | 'LOCAL' | 'MIDDLEPLATFORM' | 'USER' | 'USER2')}
   */
  serviceType: string | 'DEFAULT' | 'IBIZCLOUD' | 'APPLICATION' | 'LOCAL' | 'MIDDLEPLATFORM' | 'USER' | 'USER2';

  /**
   * 启用服务接口DTO
   * @type {boolean}
   * @default false
   */
  enableServiceAPIDTO: boolean;
}
